package furstadminka.responsers;

import furstadminka.dbinterraction.Extractor;
import org.apache.log4j.Logger;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;

/**
 * Сервлет предназначенный для отправки картинки пользователю
 *
 * @author Vit
 */
public class HttpImageGetter extends javax.servlet.http.HttpServlet {
    /**
     * Стандартный логгер
     */
    private static final Logger logger = Logger.getLogger(HttpImageGetter.class);

    /**
     * Рабочий каталог, в котором лежат картинки
     */
    private String imageFilePath;

    /**
     * Каталог для временных картинок
     */
    private String imageTmpFilePath;

    /**
     * Инициализирующий метод
     *
     * @throws ServletException
     */
    public void init() throws ServletException {
        this.imageFilePath = Extractor.getImageFolder();
        this.imageTmpFilePath = Extractor.getImageTmpFolder();
    }

    /**
     * Принимает запрос с названием картинки и возвращает ее
     *
     * @param request  Запрос с названием каринки
     * @param response Пересылаемая картинка
     */
    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response){
        String paramImg = "";
        String paramImgTmp = "";
        paramImg = request.getParameter("image");
        paramImgTmp = request.getParameter("imagetmp");
        if (paramImg != null || paramImgTmp != null) {
            ServletOutputStream out = null;
            BufferedInputStream buf = null;
            response.setContentType("image/png");
            File imageFile = null;
            if (paramImg != null) {
                imageFile = new File(this.imageFilePath + paramImg);
            } else if (paramImgTmp != null) {
                imageFile = new File(this.imageTmpFilePath + paramImgTmp);
            }
            if (imageFile != null) {
                BufferedImage bi = null;
                try {
                    bi = ImageIO.read(imageFile);
                    out = response.getOutputStream();
                    ImageIO.write(bi, "png", out);
                } catch (IOException e) {
                    logger.error("Error with imagefile on ImageServlet "+e);
                }
            } else {
                try {
                    response.sendError(401);
                } catch (IOException e) {
                    logger.error("IOExeption on send errorresponse(400)  in ImageServlet " + e);
                }
            }
            try {
                out.close();
            } catch (IOException e) {
                logger.error("Error on close the stream in ImageServlet " + e);
            }
        }
    }
}
